
#include <iostream>
#include <string.h>


class string{
private:
    int _len;
    char* _cstr;

public:
    string(): _len(0), _cstr(new char[1]{'\0'}) {}
    string(const char* cstr): _len(strlen(cstr)), _cstr(new char[_len + 1]){ strcpy(_cstr, cstr);}
    string(const string& str): _len(str._len), _cstr(new char[_len + 1]) { strcpy(_cstr, str._cstr);}
    ~string(){
        delete[] _cstr;
    }

public:
    string& operator=(const string& str){
        if(&str == this) return *this;
        if(_cstr) delete[] _cstr;

        _len = str._len;
        _cstr = new char[_len + 1];
        strcpy(_cstr, str._cstr);

        return *this;
    }

    string& operator=(const char* cstr){
        if(_cstr == cstr) return *this;
        if(_cstr) delete[] _cstr;

        _len = strlen(cstr);
        _cstr = new char[_len + 1];
        strcpy(_cstr, cstr);

        return *this;
    }
    
    friend std::ostream operator<<(std::ostream os, string& str){

    }

    char& operator[](int index){

    }

public:
    int size() { return _len;}
    const char* c_str() { return _cstr;}
    

};